package tablaSimbolos;

import java.util.HashMap;
import java.util.Iterator;

import ast.sentencias.NodoBloque;

public class Constructor {
	protected HashMap<String, Parametro> parametros;
	protected HashMap<String, VariableLocal> variablesLocales;
	protected String perteneceA;
	protected int cantParametros;
	protected NodoBloque ast;

	public Constructor() {
		parametros = new HashMap<String, Parametro>();
		variablesLocales = new HashMap<String, VariableLocal>();
		cantParametros = 0;
	}


	public void incrementarCantParametros() {
		cantParametros++;
	}

	public int getCantParametros() {
		return cantParametros;
	}

	public String getPerteneceA() {
		return perteneceA;
	}

	public void setPerteneceA(String perteneceA) {
		this.perteneceA = perteneceA;
	}

	public HashMap<String, Parametro> getParametros() {
		return parametros;
	}

	public HashMap<String, VariableLocal> getVariablesLocales() {
		return variablesLocales;
	}

	public void setAST(NodoBloque cuerpo) {
		ast = cuerpo;
	}

	public NodoBloque getAST() {
		return ast;
	}

	public String getNombre() {
		return perteneceA;
	}
	
	public Parametro obtenerParametroPosicion(int i)
	{
		Iterator<Parametro> it =  this.parametros.values().iterator();
		boolean encontre = false;
		Parametro toReturn = it.next();
		encontre = toReturn.getLugar() == i;
		while (!encontre && it.hasNext())
		{
			toReturn = it.next();
			encontre = toReturn.getLugar() == i;
		}
		return toReturn;
	}

	public void imprimirInfo() {
		System.out.printf("		Pertenece a la clase: %s \n", perteneceA);
		System.out.printf("		Cantidad de parametros: %d \n", cantParametros);
		for (Parametro p : parametros.values()) {
			System.out.printf("			Parametro %s, tipo: %s, lugar %i \n", p.getNombre(), p
					.getTipo().toString(), p.getLugar());
		}
		for (Variable p : variablesLocales.values()) {
			System.out.printf("		Variable %s, tipo: %s \n", p.getNombre(), p
					.getTipo().toString());
		}
	}
}
